﻿// Bad Hair Day POJ - 3250.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// https://vjudge.csgrandeur.cn/problem/POJ-3250
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <stdio.h>
#include <stack>
#include <cstring>

using namespace std;

/*
农场主约翰的 N 头奶牛（1 ≤ N ≤ 80,000）中，有几头奶牛今天的头发很乱！
由于每头牛都对自己凌乱的发型很自责，约翰农场主想统计一下能看到其他牛头顶的牛的数量。

每头牛 i 都有一个指定的高度 hi（1 ≤ hi ≤ 1,000,000,000），并且站在一排面向东方（在我们的图表中是向右）的牛中。
因此，只要奶牛 比奶牛 i 短，奶牛 i 就能看到它前面的奶牛（即奶牛 i+1、i+2 等）的头顶。


请看这个例子：

奶牛 #1 可以看到奶牛 #2、3、4 的发型
2 号奶牛看不到任何奶牛的发型
3 号奶牛可以看到 4 号奶牛的发型
4 号奶牛看不到奶牛的发型
5 号奶牛可以看到 6 号奶牛的发型
6 号奶牛看不到任何奶牛！


让 ci 表示从奶牛 i 可以看到其发型的奶牛数量；
请计算 c1 到 cN 的总和。在本例中，所需的答案是 3 + 0 + 1 + 0 + 1 + 0 = 5。

输入
第 1 行 奶牛数量 N。
第 2...N+1 行： 第 i+1 行包含一个整数，即奶牛 i 的身高。
输出
第 1 行 一个整数，即 c1 到 cN 的总和。

6
10
3
7
4
12
2

5


*/

const int N = 80010;
int arr[N];
int n;

void solve() {
	stack<int> st;
	int ans[N]; memset(ans, 0, sizeof ans);
	for (int i = n-1; i >=0 ; i--) {
		while (!st.empty() && arr[st.top()] < arr[i]) 
			st.pop();
		if (st.empty()) 
			ans[i] = n-i-1;
		else 
			ans[i] = st.top() - i -1;
		st.push(i);
	}
	long long anss = 0;
	for (int i = 0; i < n; i++) {
		anss += ans[i];
	}

	cout << anss << endl;
}

int main() 
{
	scanf("%d",&n);
	for (int i = 0; i < n; i++) {
		scanf("%d",&arr[i]);
	}
	solve();

	return 0;
}

 